Skip to content

builder: declare Darwin socket and process symbols - #5636

Open
yohimik wants to merge 2 commits into
tinygo-org:devfrom
yohimik:upstream-pr/darwin-socket-symbols
Open

builder: declare Darwin socket and process symbols#5636
yohimik wants to merge 2 commits into
tinygo-org:devfrom
yohimik:upstream-pr/darwin-socket-symbols

Conversation

@yohimik

@yohimik yohimik commented Aug 30, 2026

Copy link
Copy Markdown

Scope

Add the libSystem declarations needed for Darwin sockets and posix_spawn. The minimal SDK does not provide these symbols. The builder assembles a second stub object and links it with the SDK object.

This branch now contains only the builder change and a direct socket test. The copied fcntl, process, weak-pointer and TLS commits have been removed. The shared builder support moved here from #5634 so that it has one owner. #5634 will depend on this PR instead of carrying a second copy.

This change does not need a net submodule update. A program can call the standard syscall socket API directly. Full netdev support is a separate dependency of tinygo-org/net#74.

The posix_spawn_file_actions_addchdir_np symbol requires macOS 10.15 or later when used by the process implementation.

Verification

The new host-only test testdata/darwinsockets.go creates a loopback listener with the syscall package, obtains its assigned port, connects, accepts, checks the peer address and shuts down the connection. It does not use the TinyGo netdev or require an external service.

The test passed with ordinary Go on native Darwin arm64. Fork CI at 6fded0c passed all 24 checks. See Linux, macOS, and Windows. These results are for the independent branch, not the old combined branch.

The released fork already uses the same extra-stub mechanism for its socket and process probes. That is integration evidence, not a substitute for the new independent branch test.

Downstream context

The dispat acceptance record covers files, environment variables, pipes, child processes, goroutines, network clients, real TLS, certificate rejection and self-update rollback. See the recorded acceptance. Those results are for the combined fork and the revisions named in that document. They do not prove that this one PR supplies all those features.

Related pull requests

The target partition below keeps each change in one PR. The process branch no longer contains copied builder or fcntl commits.

In tinygo-org/net

Full Darwin networking also needs the merged net changes and a later src/net pin update. No upstream merge or current full-suite pass is implied by this list.

Additional independent gaps found in Crier are covered by #5655 (cookie-jar loader merge) and tinygo-org/net#82 (ListenConfig). They do not duplicate the process, TLS, deadline or server-TLS changes above. Current Crier comparison work is separate from its standard-Go release.

Current Crier evidence

The Crier report separates the original size comparison from a new CI-built candidate test. The original stripped Linux ARM64 result is 13,829,248 bytes versus Go's 30,277,794 bytes. Two render fixtures exceed pixel tolerance.

Candidate e7d34c8c126e0eecd2ce711915f2f88d112d833a, with net 0f460803, passed all 24 fork CI checks. Its downloaded compiler artifacts, with no source overlays, build unchanged Crier 7edaff9. Linux ARM64 E2E passed 143 cases with no failures or skips. Darwin ARM64 passed 142 with no failures and one platform trust-store skip. Darwin startup now works. A separate Darwin local-TLS matrix passes certificate rejection, plaintext refusal, update to a Go 1.1.0 target, and offline rollback. Both platforms pass spawn, signal, cookiejar, os/fcntl, and network probes.

These are combined-candidate results, not proof that this PR alone supplies all features. No new pixel or stripped-size comparison, amd64 execution, or current Dispat acceptance is claimed. WaitDelay and the recorded net limits remain open. No fork release was published.

@yohimik

yohimik commented Sep 2, 2026

Copy link
Copy Markdown
Author

Rebased on dev after the 0.42.0 release. The change applies on top of v0.42.0
as released without a conflict, and the diff is unchanged.

@yohimik
yohimik force-pushed the upstream-pr/darwin-socket-symbols branch from 8153e9a to e8394f6 Compare September 5, 2026 02:28
yohimik added a commit to yohimik/tinygo that referenced this pull request Sep 5, 2026
Use posix_spawn on hosted Linux and Darwin. Map process files, apply the
working directory and process group, and clear the child signal mask.
Use wait4 for process status and support Kill and Signal.

Mark Darwin pipes close-on-exec under ForkLock. Darwin also needs the
fcntl wrapper in PR tinygo-org#5612 and the libSystem symbols in PR tinygo-org#5636.
Concurrent spawn and pipe creation need the RWMutex fix in PR tinygo-org#5630.

Keep the process stubs on other targets and add process regression tests.
@yohimik yohimik changed the title builder: declare the BSD socket API in the darwin libSystem stub builder: declare Darwin socket and process symbols Sep 5, 2026
yohimik added a commit to yohimik/tinygo that referenced this pull request Sep 5, 2026
Open /dev/null in the child before closing a nil or unnamed descriptor. Save remap sources before these actions. This avoids a parent descriptor check and its race with concurrent open.

Use descriptor reads and exec redirection in remap tests. Check nil slots and temporary descriptors. The tests pass with ordinary Go on Darwin and Linux. Both TinyGo os suites pass with released compiler source overlays. Darwin also needs the addopen symbol from PR tinygo-org#5636.
yohimik added a commit to yohimik/tinygo that referenced this pull request Sep 5, 2026
Open /dev/null in the child before closing a nil or unnamed descriptor. Save remap sources before these actions. This avoids a parent descriptor check and its race with concurrent open.

Use descriptor reads and exec redirection in remap tests. Check nil slots and temporary descriptors. The tests pass with ordinary Go on Darwin and Linux. Both TinyGo os suites pass with released compiler source overlays. Darwin also needs the addopen symbol from PR tinygo-org#5636.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant